// 请求响应参数（不包含data）
export interface Result {
  code: string;
  msg: string;
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T;
}

// 分页响应参数
export interface ResPage<T> {
  records: T[];
  current: number;
  size: number;
  total: number;
}

// 分页请求参数
export interface ReqPage {
  pageNum: number;
  pageSize: number;
}

// 文件上传模块
export namespace Upload {
  export interface ResFileUrl {
    fileUrl: string;
  }
  export interface ReqImg {
    source: File;
    type: string;
    action: string;
    timestamp: number;
    auth_token: string;
    nsfw: number;
    album_id: string;
  }
}

// 登录模块
export namespace Login {
  export interface ReqLoginForm {
    username: string;
    password: string;
  }
  //登录返回数据
  export interface ResLogin {
    accessToken: string;
    refreshToken: string;
    name: string;
    userAvatar: string;
    departmentId: number;
    userRole: number;
    userId: number;
    departmentName: string;
  }
  export interface ResAuthButtons {
    [key: string]: string[];
  }
}

// 用户中心模块
export namespace User {
  // 用户实体信息
  export interface UserEntity {
    userId: number;
    username: string; //登录账号
    password: string;
    userGender: number;
    userIdentity: string; //身份证号
    userPhone: string;
    name: string; //姓名
    userAvatar: string; // 头像
    departmentId: number; // 用户所在部门id
    departmentName: string; //部门名称
    createTime: string;
    upDateTime: Date;
    userRole: number; //0：管理员 1:客服中心 2:调度中心 3:中心库房  4: 分站库房 5: 分站 6: 配送中心 7:财务部 8:配送员
    userStatus: number; // 用户状态 0：关闭 1: 开启
    deleted: number;
  }
  export interface RoleEntity {
    roleId: number;
    roleMenu: string; //登录账号
    roleLevel: number; // 0：管理员 1:客服中心 2:调度中心 3:中心库房  4: 分站库房 5: 分站 6: 配送中心 7:财务部 8:配送员
  }

  export interface ReqUserParams extends ReqPage {
    userId: number;
    userRole: number;
    departmentId: number;
    name: string; //姓名
    userIdentity: string; //身份证号
    departmentName: string; //部门名称
  }
  export interface ResUserList {
    userId: number;
    name: string; //姓名
    username: string; //登录账号
    userGender: number; //0-1
    userIdentity: string; //身份证号
    userPhone: string;
    userAvatar: string; // 头像
    departmentName: string; // 用户所在部门id
    departmentId: number; // 用户所在部门id
    userRole: number; //1:客服中心 2:调度中心 3:中心库房 4:分站 5:配送中心 6:财务部 +员工 7:配送员
    userStatus: number; // 用户状态 0：关闭 1: 开启
    createTime: string;
  }
  export interface EditUserParams {
    userId?: number;
    name?: string; //姓名
    userGender?: number; //0-1
    userIdentity?: string; //身份证号
    userPhone?: string;
    userAvatar?: string; // 头像
  }
}

// 客服中心模块
export namespace Custom {
  // 客户实体信息
  export interface CustomEntity {
    customerId: number; // 客户id，非空
    customerName: string; // 客户名，非空
    flatsName?: string; // 单位名称
    customerIdentity: string; // 客户身份证号，非空
    customerPhone: string; // 客户电话，非空
    receiverAddress: { province: string; city: string; zone: string; detail: string }; // 收货地址，JSON 格式，非空a
    customerEmail?: string; // 邮件地址
    customerLandline?: string; // 座机号
  }
  // 返回客户信息
  export interface ResCustomList {
    customerId: number; // 客户id，非空
    customerName: string; // 客户名，非空
    flatsName?: string; // 单位名称
    customerIdentity: string; // 客户身份证号，非空
    customerPhone: string; // 客户电话，非空
    receiverAddress: { province: string; city: string; zone: string; detail: string }; // 收货地址，JSON 格式，非空a
    customerEmail?: string; // 邮件地址
    customerLandline?: string; // 座机号
    deleted: number; // 是否删除，非空
  }
  //订单信息实体
  export interface OrderEntity {
    orderType: number; // 订单类型，非空
    customerId: number; // 客户id，非空
    orderItems: { goodsId: number; goodsName: string; goodsPrice: number; count: number; measureUnit: string }[];
    orderStatus: number; // 订单状态，非空
    totalAmount: number; // 总额，非空
    orderRemark?: string; // 备注信息
    receiverAddress: { province: string; city: string; zone: string; detail: string }; // 收货地址，JSON 格式，非空
    receiverName: string; // 收货人名，非空
    receiverPhone: string; // 收货人电话，非空
    optInvoice: number; // 是否需要发票，非空
    invoiceId?: number; // 发票id
    expDeliveryTime?: Date; // 期望配送时间
    createTime: Date; // 创建时间，非空
    creatorId: number; // 创建人id，非空
    shippedTime?: Date; // 发货时间
    completeTime?: Date; // 成交时间
    updateTime: Date; // 更新时间，非空
  }

  //订单信息实体
  export interface ResOrderList {
    orderId: string; // 订单id，非空
    orderType: number; // 订单类型，非空
    customerId: number; // 客户id，非空
    orderItems: { goodsId: number; goodsName: string; goodsPrice: number; count: number; measureUnit: string }[];
    orderStatus: number; // 订单状态，非空
    totalAmount: number; // 总额，非空
    orderRemark?: string; // 备注信息
    receiverAddress: { province: string; city: string; zone: string; detail: string }; // 收货地址，JSON 格式，非空
    receiverName: string; // 收货人名，非空
    receiverPhone: string; // 收货人电话，非空
    optInvoice: number; // 是否需要发票，非空
    invoiceId?: number; // 发票id
    expDeliveryTime?: Date; // 期望配送时间
    createTime: Date; // 创建时间，非空
    creatorId: number; // 创建人id，非空
    shippedTime?: Date; // 发货时间
    completeTime?: Date; // 成交时间
    updateTime: Date; // 更新时间，非空
    deleted: number; // 是否删除，非空
  }
  //请求前八名销售商品数据
  export interface ReqTopGoods {
    goodsName: string;
    goodsSale: number;
  }
}

//商品模块
export namespace Good {
  //商品实体类
  export interface GoodsEntity {
    goodsId: number; // 商品id，非空
    goodsName: string; // 商品名，非空
    setId: number; // 所属二级分类id，非空
    measureUnit: string; // 计量单位，非空
    goodsPrice: number; // 商品原价，非空
    goodsDiscount?: number; // 商品折扣
    goodsCost: number; // 商品成本，非空
    goodsModel?: string; // 商品型号
    vendorInfo: { vendorId: number; vendorName: string }; // {供应商id、供应商名称}，非空
    goodsShelfLife: Date; // 商品保质期限，非空
    optReturn: number; // 可否退货，非空
    optReplace: number; // 可否换货，非空
    goodsRemark?: string; // 商品备注信息
    deleted: number; // 是否删除，非空
  }
  //商品一级分类
  export interface GoodsList {
    listId: number; // 一级分类id，非空
    listName: string; // 一级分类名，非空
    listDescription?: string; // 一级分类描述
    deleted: boolean; // 是否删除，非空
  }
  //商品二级分类
  export interface GoodsSet {
    setId: number; // 二级分类id，非空
    listId: number; // 一级分类id，非空
    setName: string; // 二级分类名，非空
    setDescription?: string; // 二级分类描述
    deleted: boolean; // 是否删除，非空
  }
  //商品实体类
  export interface ReqGoodsEntity {
    goodsId: number; // 商品id，非空
    goodsName: string; // 商品名，非空
    setId: number; // 所属二级分类id，非空
    measureUnit: string; // 计量单位，非空
    goodsPrice: number; // 商品原价，非空
    goodsDiscount?: number; // 商品折扣
    goodsCost: number; // 商品成本，非空
    goodsModel?: string; // 商品型号
    vendorInfo: { vendorId: number; vendorName: string }; // {供应商id、供应商名称}，非空
    goodsShelfLife: Date; // 商品保质期限，非空
    optReturn: number; // 可否退货，非空
    optReplace: number; // 可否换货，非空
    goodsRemark?: string; // 商品备注信息
    level: number;
  }
  //返回商品
  export interface ResGoodsEntity {
    goodsName: string; // 商品名，非空
    setId: number; // 所属二级分类id，非空
    measureUnit: string; // 计量单位，非空
    goodsPrice: number; // 商品原价，非空
    goodsDiscount?: number; // 商品折扣
    goodsCost: number; // 商品成本，非空
    goodsModel?: string; // 商品型号
    vendorInfo: { vendorId: number; vendorName: string }; // {供应商id、供应商名称}，非空
    goodsShelfLife: Date; // 商品保质期限，非空
    optReturn: number; // 可否退货，非空
    optReplace: number; // 可否换货，非空
    goodsRemark?: string; // 商品备注信息
  }
  //商品一级分类
  export interface ReqGoodsList {
    listId: number; // 一级分类id，非空
    listName: string; // 一级分类名，非空
    listDescription?: string; // 一级分类描述
    deleted: boolean; // 是否删除，非空
  }
  //商品二级分类
  export interface ReqGoodsSet {
    setId: number; // 二级分类id，非空
    listId: number; // 一级分类id，非空
    setName: string; // 二级分类名，非空
    setDescription?: string; // 二级分类描述
    deleted: boolean; // 是否删除，非空
  }
  //获取商品分类信息
  export interface ReqClassify {
    listName: string; // 一级分类id，非空
    setName: string; // 二级分类名，非空
  }
  export interface ReqGoodsTreeList {
    id: string;
    name: string;
    children?: ReqGoodsTreeList[];
  }
}

////////////////////////////////////////////////////////////////
// 分站管理模块
export namespace Substation {
  //查询分站列表参数
  export interface ReqSubstationParams {
    substationId: number;
    substationName: string;
  }
  export interface ResSubstationList {
    substationId: number;
    substationName: string;
    substationAddress: { province: string; city: string; zone: string; detail: string };
    subWarehouseId: number;
    createTime: Date;
    creatorId: number;
  }
  export interface SubstationInfo {
    substationId: number;
    substationName: string;
    substationAddress: { province: string; city: string; zone: string; detail: string };
    subWarehouseId: number;
    createTime: Date;
    creatorId: number;
  }
  //查询任务单参数
  export interface ReqTaskOrderParams extends ReqPage {
    taskId: string; //任务单id
    taskType: number; //任务单类型 0-3, -1代表查询全部
    taskStatus: number; //数组, 包括多选查询[0,1,2,3,4], [-1]代表查询全部
    substationId: number; //任务单所属分站id
    courierId: number; //被分配配送员id
  }
  //任务单查询返回参数
  export interface ResTaskOrderList {
    taskId: string;
    taskType: number; //0-2
    taskStatus: number; //0-4
    substationId: number; // 任务单所属分站id
    orderInfo: {
      //订单信息
      orderId: number;
      orderItems: { goodsId: number; goodsName: string; goodsPrice: number; count: number; measureUnit: string }[];
      totalAmount: number;
      orderRemark: string;
      receiverAddress: { addressString: string };
      receiverPhone: string;
      receiverName: string; //收货人姓名
      optInvoice: number; //是否要发票 0/1
      expDeliveryTime: Date; //期望配送时间
    };
    customInfo: {
      //客户信息
      customerId: number;
      customerName: string;
      customerPhone: string;
    };
    courierInfo: {
      //配送员信息
      courierId: number;
      courierName: string;
    };
    taskRemark: string; //任务单备注
    invoiceId: number; //发票号
    customSatisfaction: number; //客户满意度 0-5
    customEvaluation: string; //客户评价
    createTime: Date; //任务单创建时间
    completeTime: Date; //任务单完成时间
    updateTime: Date;
  }

  //任务单统计返回参数
  export interface ResTaskOrderStatistics {
    taskId?: string;
    taskStatus?: number; //0-4
    taskType?: number; //1-3
    substationId?: number; // 任务单所属分站id
    courierInfo?: {
      //配送员信息
      courierId?: number;
      courierName?: string;
    };
    customSatisfaction?: number; //客户满意度 0-5
    createTime?: Date; //任务单创建时间
    completeTime?: Date; //任务单完成时间
  }
  //任务单查询返回参数
  export interface TaskOrderInfo {
    taskId: number;
    substationId: number; // 任务单所属分站id
    orderInfo: {
      //订单信息
      orderId: number;
      totalAmount: number;
    };
    customInfo: {
      //客户信息
      customerId: number;
      customerName: string;
    };
  }

  //查询缴款单参数
  export interface ReqPaymentParams extends ReqPage {
    paymentId: number; //缴款单号
    substationId: number; //分站号
    paymentType: number; //支付类型 0-1
  }
  //缴款单查询返回参数
  export interface ResPaymentList {
    paymentId: number;
    paymentType: number;
    substationId: number;
    taskId: string;
    courierInfo: {
      courierId: number;
      courierName: string;
    };
    customInfo: {
      customerId: number;
      customerName: string;
      customerPhone: string;
    };
    orderItems?: {
      goodsId?: number;
      goodsName?: string;
      goodsPrice?: number;
      count?: number;
      measureUnit?: string;
    }[];
    paymentTotal: number;
    createTime: Date;
  }
}

////////////////////////////////////////////////////////////////
// 调度中心管理模块
export namespace TransferOrder {
  //查询调拨单参数
  export interface ReqTransferOrderParams extends ReqPage {
    transferOrderId: number; //调拨单号
    transferStatus: number; //调拨状态 0-1-2
  }
  //调拨单查询返回参数
  export interface ResTransferOrderList {
    transferOrderId: number;
    transferType: number;
    transferStatus: number;
    orderId: number;
    taskId: string;
    outboundWarehouseId: number;
    inboundWarehouseId: number;
    orderItems?: {
      goodsId?: number;
      goodsName?: string;
      goodsPrice?: number;
      count?: number;
      measureUnit?: string;
    }[];
    expOutboundTime: Date;
    createTime: Date;
    creatorId: number;
  }
  //调拨单实体
  export interface ReqTransferOrderEntity {
    transferOrderId: number;
    transferType: number;
    orderId: number;
    outboundWarehouseId: number;
    inboundWarehouseId: number;
    goodsItems?: {
      goodsId?: number;
      goodsName?: string;
      count?: number;
      measureUnit?: string;
    }[];
  }
}

////////////////////////////////////////////////////////////////
//财务管理模块
export namespace Money {
  //查询发票单参数
  export interface ReqBillParams extends ReqPage {
    billId: number; //发票单号
    billStatus: number; //发票状态 0-1-2
  }
  //发票单查询返回参数
  export interface ResBillList {
    billId: string;
    billStatus: number;
    billRemark: string;
    taskOrderInfo?: {
      taskId: number;
      substationId: number; // 任务单所属分站id
      orderInfo: {
        //订单信息
        orderId: number;
        orderItems: { goodsId: number; goodsName: string; goodsPrice: number; count: number; measureUnit: string }[];
        totalAmount: number;
      };
      customInfo: {
        //客户信息
        customerId: number;
        customerName: string;
        customerPhone: string;
      };
    };
    createTime: Date;
  }
  //发票单查询返回参数
  export interface BillInfo {
    billId: string;
    billStatus: number;
    billRemark: string;
    taskOrderInfo?: {
      taskId: number;
      substationId: number; // 任务单所属分站id
      orderInfo: {
        //订单信息
        orderId: number;
        orderItems: { goodsId: number; goodsName: string; goodsPrice: number; count: number; measureUnit: string }[];
        totalAmount: number;
      };
      customInfo: {
        //客户信息
        customerId: number;
        customerName: string;
        customerPhone: string;
      };
    };
    createTime: Date;
  }
  //查询供应商单参数
  export interface ReqSupplierParams extends ReqPage {
    supplierId: number; //供应商号
    supplierStatus: number; //012
  }
  //供应商单查询返回参数
  export interface ResSupplierList {
    supplierId: number; //供应商号
    supplierName: string;
    supplierStatus: number; //012
    supplierAddress: string;
    moneyGet: number;
    moneyBack: number;
    moneyAccount: number;
  }
}

// 库房管理模块
export namespace Warehouse {
  //查询出入库单参数
  export interface ReqEntryOutParams extends ReqPage {
    circulationId: number;
    warehouseId: number;
    circulationType: number; // 流动类型 0-入库 1-出库
    circulationDetail: number; // 流动细节 0-进货入库 1-调拨入库 2-退货入库 3-调拨出库 4-退货出库 5-取货出库
    circulationStatus: number; // 状态 0-进行中 1-已完成 2-已取消
  }
  //出入库单查询返回参数
  export interface ResEntryOutList {
    circulationId: number; // 出入库单表id
    warehouseId: number; // 库房id
    circulationType: number; // 流动类型 0-入库 1-出库
    circulationDetail: number; // 流动细节 0-进货入库 1-调拨入库 2-退货入库 3-调拨出库 4-退货出库 5-取货出库
    transferId: number; // 调拨单id
    taskId: string; // 任务id
    goodsItems: {
      goodsId: number; // 商品id
      goodsName: string; // 商品名称
      measureUnit: string; // 计量单位
      count: number; // 数量
    }[];
    circulationStatus: number; // 状态 0-进行中 1-已完成 2-已取消
    createTime: Date; // 创建时间
    completeTime: Date; // 完成时间
    lastOperator: number; // 最后操作人
  }
  //库房表查询返回参数
  export interface WarehouseInfo {
    warehouseId: number; // 库房id
    warehouseName: string; // 库房名
    warehouseAddress: { province: string; city: string; zone: string; detail: string }; // 库房地址
    warehouseLevel: number; // 库房等级 0-中心库房 1-分站库房
    createTime: Date; // 创建时间
  }
  //库房列表查询
  export interface ReqWarehouseParams extends ReqPage {
    warehouseId: number; // 库房id
    warehouseName: string; // 库房名
    warehouseLevel: number; // 库房等级 0-中心库房 1-分站库房
  }
  //库房查询返回参数
  export interface ResWarehouseList {
    warehouseId: number; // 库房id
    warehouseName: string; // 库房名
    warehouseAddress: { province: string; city: string; zone: string; detail: string }; // 库房地址
    warehouseLevel: number; // 库房等级 0-中心库房 1-分站库房
    createTime: Date; // 创建时间
  }
  // 库存表查询返回参数
  export interface InventoryData {
    inventoryId: bigint; // 库存id
    warehouseId: number; // 库房ID
    goodsId: number; // 商品ID
    goodsName: string; // 商品名称
    measureUnit: string; // 计量单位
    maxHold: number; // 最大值
    warnHold: number; // 预警值
    totalHold: number; // 总库存量
    availableHold: number; // 可分配量
    returnHold: number; // 退回数量
    allocatedHold: number; // 已分配量
    updateTime: Date; // 更新时间
  }
  // 补货参数
  export interface ResSupply {
    inventoryId?: number;
    warehouseId?: number;
    goodsId?: number;
    goodsName?: string;
    count?: number; // 补货数量
    measureUnit?: string;
  }
  //库房统计返回参数
  export interface ResWarehouseStatistics {
    warehouseId?: number;
    circulationType: number; // 流动类型 0-入库 1-出库
    circulationDetail: number; // 流动细节 0-进货入库 1-调拨入库 2-退货入库 3-调拨出库 4-退货出库 5-取货出库
  }
}

// 客服中心模块
export namespace Vendor {
  //供应商实体
  export interface VendorEntity {
    vendorId: number; // 供应商id，非空
    vendorName: string; // 供应商名称，非空
    vendorAddress: { province: string; city: string; zone: string; detail: string }; // 地址，JSON格式，非空
    vendorContact: string; // 联系人，非空
    vendorPhone: string; // 联系电话，非空
    vendorAccountBank: string; // 开户行
    vendorAccount: string; // 银行账号
    vendorEmail: string; // 邮箱
    vendorZip: string; // 邮编
    vendorLegalPerson: string; // 法人
    vendorRemark: string; // 备注
    deleted: number; // 是否删除，非空
  }
  //供应商请求
  export interface ReqVendorList {
    vendorId: number; // 供应商id，非空
    vendorName: string; // 供应商名称，非空
    vendorAddress: { province: string; city: string; zone: string; detail: string }; // 地址，JSON格式，非空
    vendorContact: string; // 联系人，非空
    vendorPhone: string; // 联系电话，非空
    vendorAccountBank: string; // 开户行
    vendorAccount: string; // 银行账号
    vendorEmail: string; // 传真
    vendorZip: string; // 邮编
    vendorLegalPerson: string; // 法人
    vendorRemark: string; // 备注
    deleted: number; // 是否删除，非空
  }
}
